from PySide6.QtWidgets import QMainWindow,QPlainTextEdit,QFrame,QMenu,QApplication
from file_menu import FileMenu
import sys

class NotepadMain(QMainWindow):
    """记事本主界面

    :param QMainWindow: 主窗口
    """
    def __init__(self):
        """初始化
        """
        super().__init__()
        self.file_name = "无标题"
        self.base_name = " - 记事本"
        self.setup_ui()
        self.set_event_bind()

    def setup_ui(self):
        """设置用户界面
        """
        # 设置窗口标题
        self.setWindowTitle(f"{self.file_name}{self.base_name}")

        # 设置窗口大小
        self.resize(800, 500)
        
        # 创建菜单栏 设置为私有属性
        self.__menubar = self.menuBar()
        
        # 实例化自定义菜单
        self.__file_menu = FileMenu()

        # 添加其他自定义的菜单
        self.__menubar.addMenu(self.__file_menu)

        # 示例化纯文本编辑 
        self.__plain_text_edit = QPlainTextEdit()
        
        # 消除框线
        self.__plain_text_edit.setFrameShape(QFrame.Shape.NoFrame)

        # 添加纯文本编辑到 中心窗口
        self.setCentralWidget(self.__plain_text_edit)

        # 添加状态栏目
        self.statusBar()

    def new_window(self):
        """新窗口

        :param main_window: PySide6 主窗口
        """
        notepad = NotepadMain()
        notepad.show()
    
    def get_window_title(self) -> str:
        """获取窗口标题

        :return: window_title
        """
        return self.windowTitle()

    def set_window_title(self):
        """设置窗口标题
        """
        self.setWindowTitle(f"{self.file_name}{self.base_name}")

    def set_event_bind(self):
        """设置事件绑定
        """
        # 文件菜单 添加事件绑定
        self.__file_menu.set_event_bind(self,self.__plain_text_edit)
        self.__plain_text_edit.modificationChanged.connect(self.set_star_window_title)

    def set_star_window_title(self,changed):
        """设置带*窗口标题
        """
        self.setWindowTitle(f"*{self.file_name}{self.base_name}") if changed else  self.setWindowTitle(f"{self.file_name}{self.base_name}")

    def add_menu(self,menu: QMenu):
        """添加按钮

        :param menu: PySide6 按钮类
        """
        # 对外提供的接口
        self.__menubar.addMenu(menu)

    def closeEvent(self, event):
        return super().closeEvent(event)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    # 添加其他菜单
    notepad_main = NotepadMain()
    notepad_main.show()
    sys.exit(app.exec())
